package com.chj;

/**
 * 子类是不能够继承父类的构造器，但是要注意的是，如果父类的构造器都是带有参数的，则必须在子类的构造器中
 * 显示地通过super关键字调用父类的构造器并配以适当的参数列表。如果父类有无参构造器，则在子类的构造器中
 * 用super关键字调用父类构造器不是必须的，如果没有使用super关键字，系统会自动调用父类的无参构造器
 */
public class TestExtends {

    class People{
        String name;
        // 如果父类中没有无参构造方法则子类的构造方法中必须添加父类有参构造方法
        public People() {
            System.out.println(1);
        }
        public People(String name) {
            System.out.println(2);
            this.name = name;
        }
    }

    /**
     * 如果子类构造方法中没有使用super关键字，系统会自动调用父类的无参构造器
     */
//    static class Child{ // 如果没有继承关系则该类初始化People类的时候不会调用该类的无参构造方法
     class Child extends People{ // 如果有继承关系则首先调用调用父类的无参构造方法
        People father;
        public Child() {
//            super("s"); // 如果父类中没有无参构造方法则必须添加父类有参构造方法
            System.out.println(4);
        }
        public Child(String name) {
//            super("s");// 如果父类中没有无参构造方法则必须添加父类有参构造方法
            System.out.println(3);
            this.name = name;
//            People father = new People(name);
            father = new People(name+":F");
        }
    }

    public static void main(String[] args) {
        // 结果： 1 3 2
        TestExtends t = new TestExtends();
        Child c1 = t.new Child("p2");
        // 内部类如果是静态的则可以直接new 出来
//        Child c2 = new Child("p2");

        System.out.println("--------------------------");
        int i = Integer.MAX_VALUE;
        int j = i+1;
        System.out.println(j<i);
    }

}
